<?php
//------------------------------------------------------------ Contraintes d'accès de la page

	// on vérifie que cette page est appelée à partir de l'index et que l'utilisateur n'est pas connecté
	if(isset($_SESSION) && !isset($_SESSION['user_id'])){
	
?>
<?php
//------------------------------------------------------------ Valeur des champs avant saisie

	$dv_login = ""; // valeur du champ login (reg_login)
	$dv_password = ""; // valeur du champ mot de passe (reg_password)
	$dv_confirm = ""; // valeur du champ de confirmation (reg_confirm)
	$dv_nom = ""; // valeur du champ nom (reg_nom)
	$dv_prenom = ""; // valeur du champ prenom (reg_prenom)
	$dv_email = ""; // valeur du champ e-mail (reg_email)
	$dv_adresse = "N°, Voie"; // valeur du champ adesse (reg_adresse)
	$dv_cp = "CP"; // valeur du champ code postal (reg_cp)
	$dv_ville = "Ville"; // valeur du champ ville (reg_ville)
	$dv_pays = "Pays"; // valeur du champ pays (reg_pays)
	$dv_telperso = ""; // valeur du champ teléphone personnel (reg_telperso)
	$dv_telbureau = ""; // valeur du champ téléphone bureau (reg_telbureau)
	
?>
<?php
//------------------------------------------------------------ Traitements si le formulaire a été envoyé

/********************************* Règles :

	- login, mot de passe (et confirmation) nom et prénom ne peuvent pas être vide
	- email et téléphones si indiqués doivent avoir un format valide
	- la confirmation doit être identique au mot de passe
	- le login ne doit pas être déjà utilisé par un autre utilisateur

*****************************************/

	$statut = array(); // indique le statut du traitement du formulaire (echec ou succes) - tableau contenant les messages à afficher
	$erreur = false; // indique si une erreur a été rencontrée lors du traitement

	trimTabByKey($_POST, "reg_"); // appel à la fonction trimTabByKey() définie dans fonctions.php
	
	//---------------------------------- Contrôle des données ----------------------------------
	
	if(isset($_POST['form_sent'])){ // si le formulaire est envoyé
	
		if($GLOBALS['CONFIG']['inscriptions']){
	
			// Contrôle des données du login
			if(isset($_POST['reg_login']) && is_string($_POST['reg_login'])){
				if(emptyString($_POST['reg_login'])){
					$statut[] = "Login vide";
					$erreur = true;
				}else{
					if(valueExists($_POST['reg_login'], "LOGIN", "infos_utilisateur", $connexion) > 0){
						$statut[] = "Ce login est déjà utilisé";
						$erreur = true;
					}else{
						$dv_login = $_POST['reg_login'];
					}
				}
			}else{
				$statut[] = "Aucun login indiqué";
				$erreur = true;
			}
			
			// Contrôle des données du mot de passe et de la confirmation
			if(isset($_POST['reg_password']) && is_string($_POST['reg_password'])){
				if(emptyString($_POST['reg_password'])){
					$statut[] = "Mot de passe vide";
					$erreur = true;
				}else{
					if(isset($_POST['reg_confirm']) && is_string($_POST['reg_password'])){
						if(!emptyString($_POST['reg_confirm'])){
							if($_POST['reg_confirm'] != $_POST['reg_password']){
								$statut[] = "Confirmation différente du mot de passe";
								$erreur = true;
							}
						}else{
							$statut[] = "Aucune confirmation du mot de passe indiquée";
							$erreur = true;
						}
					}
				}
			}else{
				$statut[] = "Aucun mot de passe indiqué";
				$erreur = true;
			}
			
			// Contrôle des données du nom
			if(isset($_POST['reg_nom']) && is_string($_POST['reg_nom'])){
				if(emptyString($_POST['reg_nom'])){
					$statut[] = "Nom vide";
					$erreur = true;
				}else{
					if(isNameFormat($_POST['reg_nom'])){
						$dv_nom = $_POST['reg_nom'];
					}else{
						$statut[] = "Format du nom incorrect";
						$erreur = true;
					}
				}
			}else{
				$statut[] = "Aucun nom indiqué";
				$erreur = true;
			}
			
			// Contrôle des données du prénom
			if(isset($_POST['reg_prenom']) && is_string($_POST['reg_prenom'])){
				if(emptyString($_POST['reg_prenom'])){
					$statut[] = "Prénom vide";
					$erreur = true;
				}else{
					if(isNameFormat($_POST['reg_prenom'])){
						$dv_prenom = $_POST['reg_prenom'];
					}else{
						$statut[] = "Format du prénom incorrect";
						$erreur = true;
					}
				}
			}else{
				$statut[] = "Aucun prénom indiqué";
				$erreur = true;
			}
			
			// Contrôle des données de l'adresse e-mail
			if(isset($_POST['reg_email']) && is_string($_POST['reg_email'])){
				if(!emptyString($_POST['reg_email'])){
					if(!isEmailFormat($_POST['reg_email'])){
						$statut[] = "Format de l'adresse e-mail incorrect";
						$erreur = true;
					}else{
						$dv_email = $_POST['reg_email'];
					}
				}
			}else{
				$statut[] = "Aucune adresse e-mail indiquée";
				$erreur = true;
			}
			
			// Contrôle des données de l'adresse de résidence
			if(isset($_POST['reg_adresse']) && is_string($_POST['reg_adresse'])){
				if($_POST['reg_adresse'] == "N°, Voie" || emptyString($_POST['reg_adresse'])){ // Si le champs à la valeur par défaut, on le traite comme si il était vide
					$_POST['reg_adresse'] = "";
					$dv_adresse = "N°, Voie";
				}else{
					$dv_adresse = $_POST['reg_adresse'];
				}
			}else{
				$statut[] = "Aucune adresse de domicile indiquée";
				$erreur = true;
			}
			
			// Contrôle des données du pays, du code postal  et de la ville de résidence
			$communeIndiquee = false; // variable indiquant si l'utilisateur a saisi sa commune de résidence
			if(isset($_POST['reg_cp']) && is_string($_POST['reg_cp']) && isset($_POST['reg_ville']) && is_string($_POST['reg_ville']) && isset($_POST['reg_pays']) && is_string($_POST['reg_pays'])){
				if($_POST['reg_cp'] == "CP" || emptyString($_POST['reg_cp'])){ // Si le champs à la valeur par défaut, on le traite comme si il était vide
					$_POST['reg_cp'] = "";
					$dv_cp = "CP";
				}
				if($_POST['reg_ville'] == "Ville" || emptyString($_POST['reg_ville'])){ // Si le champs à la valeur par défaut, on le traite comme si il était vide
					$_POST['reg_ville'] = "";
					$dv_ville = "Ville";
				}
				if($_POST['reg_pays'] == "Pays" || emptyString($_POST['reg_pays'])){ // Si le champs à la valeur par défaut, on le traite comme si il était vide
					$_POST['reg_pays'] = "";
					$dv_pays = "Pays";
				}
				if(!emptyString($_POST['reg_ville']) && !emptyString($_POST['reg_cp']) && !emptyString($_POST['reg_pays'])){ // Code postal, Ville et Pays sont indiqués
					$communeIndiquee = true;
					if(!isPostalFormat($_POST['reg_cp'])){
						$statut[] = "Format du code postal incorrect";
						$erreur = true;
					}else{
						$dv_cp = $_POST['reg_cp'];
					}
					if(!isNameFormat($_POST['reg_ville'])){
						$statut[] = "Format de la ville incorrect";
						$erreur = true;
					}else{
						$dv_ville = $_POST['reg_ville'];
					}
					if(!isNameFormat($_POST['reg_pays'])){
						$statut[] = "Format du pays de résidence incorrect";
						$erreur = true;
					}else{
						$dv_pays = $_POST['reg_pays'];
					}
				}else if(!emptyString($_POST['reg_ville']) || !emptyString($_POST['reg_cp']) || !emptyString($_POST['reg_pays'])){ // Parmus Code postal, Ville et Pays, au moins un n'est pas vide
					$statut[] = "La ville, son code postal et le pays doivent être indiqués";
					$erreur = true;
				}
			}else{
				$statut[] = "Aucune ville et pays de résidence indiqués";
				$erreur = true;
			}
			
			// Contrôle des données du numéro de téléphone personnel
			if(isset($_POST['reg_telperso']) && is_string($_POST['reg_telperso'])){
				if(!emptyString($_POST['reg_telperso'])){
					if(!isPhoneFormat($_POST['reg_telperso'])){
						$statut[] = "Format du numéro de téléphone personnel incorrect";
						$erreur = true;
					}else{
						$dv_telperso = $_POST['reg_telperso'];
					}
				}
			}else{
				$statut[] = "Aucun numéro de téléphone personnel indiqué";
				$erreur = true;
			}
			
			// Contrôle des données du numéro de téléphone personnel
			if(isset($_POST['reg_telbureau']) && is_string($_POST['reg_telbureau'])){
				if(!emptyString($_POST['reg_telbureau'])){
					if(!isPhoneFormat($_POST['reg_telbureau'])){
						$statut[] = "Format du numéro de téléphone de bureau incorrect";
						$erreur = true;
					}else{
						$dv_telbureau = $_POST['reg_telbureau'];
					}
				}
			}else{
				$statut[] = "Aucun numéro de téléphone de bureau indiqué";
				$erreur = true;
			}
			
			//---------------------------------- Création du compte ----------------------------------
		
			if(!$erreur){ // aucune erreur n'a été rencontrée jusqu'ici
			
				if($communeIndiquee){ // Si le pays , la ville et son code postal sont indiqués

					// on vérifie si le pays existe déjà
					$query_recuperation_pays_existe = "SELECT CODEPAYS FROM pays WHERE NOMPAYS = ".mysqlString($_POST['reg_pays']);
					$result_recuperation_pays_existe = mysql_query($query_recuperation_pays_existe, $connexion) or logError("RECUPERATION PAYS EXISTE-".$query_recuperation_pays_existe."-".mysql_error());
					if(mysql_num_rows($result_recuperation_pays_existe) > 0){ // le pays existe
						$tab_recuperation_pays_existe = mysql_fetch_row($result_recuperation_pays_existe);
						$idPays = $tab_recuperation_pays_existe[0];
					}else{ // le pays n'existe pas
						// On créé le nouveau pays
						$query_creation_pays = "INSERT INTO pays(NOMPAYS) VALUES(".mysqlString($_POST['reg_pays']).")";
						$result_creation_pays = mysql_query($query_creation_pays, $connexion) or logError("CREATION PAYS-".$query_creation_pays."-".mysql_error());
						
						if($result_creation_pays === true){
							$idPays = valueMax("CODEPAYS", "pays", $connexion);
						}else{
							$statut[] = "Erreur critique lors de la création de votre compte";
							$erreur = true;
						}
					}
					mysql_free_result($result_recuperation_pays_existe);
					
					if(!$erreur){ // aucune erreur n'a été rencontrée jusqu'ici
					
						// on vérifie si la commune existe déjà
						$query_recuperation_commune_existe = "SELECT CODECOMMUNE FROM commune WHERE NOMCOMMUNE = ".mysqlString($_POST['reg_ville'])." AND CODEPOSTAL = ".mysqlString($_POST['reg_cp']);
						$result_recuperation_commune_existe = mysql_query($query_recuperation_commune_existe, $connexion) or logError("RECUPERATION COMMUNE EXISTE-".$query_recuperation_commune_existe."-".mysql_error());
						if(mysql_num_rows($result_recuperation_commune_existe) > 0){ // la commune existe
							$tab_recuperation_commune_existe = mysql_fetch_row($result_recuperation_commune_existe);
							$idCommune = $tab_recuperation_commune_existe[0];
						}else{ // la commune n'existe pas
							// On créé la nouvelle commune
							$query_creation_commune = "INSERT INTO commune(NOMCOMMUNE, CODEPOSTAL, CODEPAYS) VALUES(".mysqlString($_POST['reg_ville']).", ".mysqlString($_POST['reg_cp']).", ".$idPays.")";
							$result_creation_commune = mysql_query($query_creation_commune, $connexion) or logError("CREATION COMMUNE-".$query_creation_commune."-".mysql_error());
							
							if($result_creation_commune === true){
								$idCommune = valueMax("CODECOMMUNE", "commune", $connexion);
							}else{
								$statut[] = "Erreur critique lors de la création de votre compte";
								$erreur = true;
							}
						}
						mysql_free_result($result_recuperation_commune_existe);
					
					}
					
				}
				
				if(!$erreur){ // aucune erreur n'a été rencontrée jusqu'ici
				
					// On créé les informations de la personne
					$query_creation_personne = "INSERT INTO personne(NOMPERSONNE, PRENOMPERSONNE, EMAILPERSONNE, ADRESSEPERSONNE, TELBUREAU, TELPORTABLE, CODECOMMUNE) ";
					$query_creation_personne .= "VALUES(".mysqlString($_POST['reg_nom'])." , ".mysqlString($_POST['reg_prenom'])." , ".mysqlString($_POST['reg_email'])." , ".mysqlString($_POST['reg_adresse'])." , ".mysqlString($_POST['reg_telbureau'])." , ".mysqlString($_POST['reg_telperso'])." ";
					if($communeIndiquee){
						$query_creation_personne .= ", ".$idCommune." ";
					}else{
						$query_creation_personne .= ", NULL ";
					}
					$query_creation_personne .= ") ";
							
					$result_creation_personne = mysql_query($query_creation_personne, $connexion) or logError("CREATION PERSONNE-".$query_creation_personne."-".mysql_error());
					
					if($result_creation_personne === true){
					
						$idPersonneCreee = valueMax("CODEPERSONNE", "personne", $connexion);
				
						$query_creation_utilisateur = "INSERT INTO infos_utilisateur(CODEPERSONNE, LOGIN, MDPCRYPT, NIVEAUUTILISATEUR, VALIDEUTILISATEUR, ESTADMINISTRATEUR) ";
						$query_creation_utilisateur .= "VALUES(".$idPersonneCreee." , ".mysqlString($_POST['reg_login'])." , '".sha1($_POST['reg_password'])."' , ".$GLOBALS['CONFIG']['niveauUtilisateurs']." ";
						if($GLOBALS['CONFIG']['validation']){
							$query_creation_utilisateur .= ", 0 ";
						}else{
							$query_creation_utilisateur .= ", 1 ";
						}
						$query_creation_utilisateur .= ", 0) ";
					
						$result_creation_utilisateur = mysql_query($query_creation_utilisateur, $connexion) or logError("CREATION UTILISATEUR-".$query_creation_utilisateur."-".mysql_error());
					
						if($result_creation_utilisateur === true){
							if($GLOBALS['CONFIG']['validation']){
								$statut[] = "Inscription terminée";
								$statut[] = "Ce compte doit maintenant être validé par un administrateur";
							}else{
								$statut[] = "Vous êtes désormais inscrit - redirection dans 2 sec...";
							}
							logAction("INSCRIPTION : ".capitalise($_POST['reg_prenom'])." ".mb_strtoupper($_POST['reg_nom'])." (".$_POST['reg_login'].")");
						}else{
							
							// Suppression de la personne précédement créée
							$query_suppression_personne = "DELETE FROM personne WHERE CODEPERSONNE = ".$idPersonneCreee;
							$result_suppression_personne = mysql_query($query_suppression_personne, $connexion) or logError("SUPPRESSION PERSONNE-".$query_suppression_personne."-".mysql_error());
							
							$statut[] = "Erreur critique lors de la création de votre compte";
							$erreur = true;
							
						}
					}else{
						$statut[] = "Erreur critique lors de la création de votre compte";
						$erreur = true;
					}
					
				}
			
			}
			
		}
		
	}
?>
<?php
//------------------------------------------------------------ Affichage du statut si le formulaire a été envoyé

	if(isset($_POST['form_sent'])){ // si le formulaire est envoyé
		
		if($erreur){
			afficherStatut($statut, 3); // appel à la fonction afficherStatut() définie dans fonctions.php
		}else{
			afficherStatut($statut, 1); // appel à la fonction afficherStatut() définie dans fonctions.php
			if(!$GLOBALS['CONFIG']['validation']){
				redirection("connexion", 2); // appel à la fonction redirection() définie dans fonctions.php
			}
		}
	
	}

?>
<?php
	
	if(!$GLOBALS['CONFIG']['inscriptions']){
	
		afficherStatut("Les inscriptions sont actuellement désactivées", 2); // appel à la fonction afficherStatut() définie dans fonctions.php
	
	}
	
?>
<form id="form_reg" method="post" action="index.php?p=inscription">
	<table class="formulaire" style="margin-left: auto; margin-right: auto;">
		<tr>
			<th class="titre" colspan="2">Création de mon compte</th>
		</tr>
		<tr>
			<th class="sous_titre" colspan="2">identifiants de connexion</th>
		</tr>
		<tr>
			<td style="width: 120px" class="etiquette">Login * :</td>
			<td style="width: 275px" class="champ"><input type="text" name="reg_login" size="25" value="<?php echo htmlentities($dv_login, ENT_COMPAT, "UTF-8") ?>" /></td>
		</tr>
		<tr>
			<td class="etiquette">Mot de passe * :</td>
			<td class="champ"><input type="password" name="reg_password" size="25" value="<?php echo htmlentities($dv_password, ENT_COMPAT, "UTF-8") ?>" /></td>
		</tr>
		<tr>
			<td class="etiquette">Confirmation * :</td>
			<td class="champ"><input type="password" name="reg_confirm" size="25" value="<?php echo htmlentities($dv_confirm, ENT_COMPAT, "UTF-8") ?>" /></td>
		</tr>
		<tr>
			<th class="sous_titre" colspan="2">informations personnelles</th>
		</tr>
		<tr>
			<td class="etiquette">Nom * :</td>
			<td class="champ"><input type="text" name="reg_nom" size="25" value="<?php echo htmlentities($dv_nom, ENT_COMPAT, "UTF-8") ?>" /></td>
		</tr>
		<tr>
			<td class="etiquette">Prénom * :</td>
			<td class="champ"><input type="text" name="reg_prenom" size="25" value="<?php echo htmlentities($dv_prenom, ENT_COMPAT, "UTF-8") ?>" /></td>
		</tr>
		<tr>
			<td class="etiquette">E-mail :</td>
			<td class="champ"><input type="text" name="reg_email" size="25" value="<?php echo htmlentities($dv_email, ENT_COMPAT, "UTF-8") ?>" /></td>
		</tr>
		<tr>
			<td class="etiquette">Adresse :</td>
			<td class="champ">
				<input id="reg_adresse" name="reg_adresse" type="text" size="25" value="<?php echo htmlentities($dv_adresse, ENT_COMPAT, "UTF-8") ?>" onfocus="clearField('reg_adresse', 'N°, Voie');" onblur="resetField('reg_adresse', 'N°, Voie');" /><br />
				<input id="reg_cp" name="reg_cp" type="text" size="5" value="<?php echo htmlentities($dv_cp, ENT_COMPAT, "UTF-8") ?>" onfocus="clearField('reg_cp', 'CP');" onblur="resetField('reg_cp', 'CP');" onkeyup="afficherListeCommunes('reg_ville', 'reg_cp', 'reg_pays', 'lst_communes', true);" /> - <input id="reg_ville" name="reg_ville" type="text" size="12" value="<?php echo htmlentities($dv_ville, ENT_COMPAT, "UTF-8") ?>" onfocus="clearField('reg_ville', 'Ville');" onblur="resetField('reg_ville', 'Ville');" onkeyup="afficherListeCommunes('reg_ville', 'reg_cp', 'reg_pays', 'lst_communes', true);" /><br />
				<input id="reg_pays" name="reg_pays" type="text" size="20" value="<?php echo htmlentities($dv_pays, ENT_COMPAT, "UTF-8") ?>" onfocus="clearField('reg_pays', 'Pays');" onblur="resetField('reg_pays', 'Pays');" onkeyup="afficherListeCommunes('reg_ville', 'reg_cp', 'reg_pays', 'lst_communes', true);" />
				<div style="position: relative;">
					<div id="lst_communes" class="infobulle" style="position: absolute; top: 0; left: 0; display: none;">
						<div class="titre"><span id="lst_communes-titre">Villes suggérées :</span><div style="position: absolute; top: 3px; right: 3px; font-size: 12px; font-weight: bold; font-style: normal;">[<a href="#" onclick="document.getElementById('lst_communes').style.display='none'; return false;">X</a>]</div></div>
						<div id="lst_communes-contenu" class="contenu"></div>
					</div>
				</div>
			</td>
		</tr>
		<tr>
			<td class="etiquette">Téléphone :</td>
			<td class="champ">
				<input type="text" name="reg_telperso" size="25" value="<?php echo htmlentities($dv_telperso, ENT_COMPAT, "UTF-8") ?>" /> <label>(Personnel)</label><br />
				<input type="text" name="reg_telbureau" size="25" value="<?php echo htmlentities($dv_telbureau, ENT_COMPAT, "UTF-8") ?>" /> <label>(Bureau)</label><br />
				(uniquement des chiffres, tous attachés)
			</td>
		</tr>
		<tr>
			<td class="envoi" colspan="2"><input type="submit" value="Inscription" <?php if(!$GLOBALS['CONFIG']['inscriptions']) echo "disabled=\"disabled\""; ?> /><input type="hidden" name="form_sent" value="1" /></td>
		</tr>
		<tr>
			<td class="legende" colspan="2">* = champs obligatoires</td>
		</tr>
	</table>
</form>
<div class="information">
	<div class="titre">Information</div>
	<h4>Validation du compte :</h4>
	<p>Après votre inscription, si les administrateurs ont choisi l'option, votre compte devra être validé par un administrateur avant de pouvoir vous connecter.</p>
</div>
<?php
//------------------------------------------------------------ Accès refusé à la page

	}else{
	
		if(isset($_SESSION)){
			include("pages/401.htm");
		}
	
	}

?>